package cn.com.dhcc.app.pub.core.job.stat;

import java.util.Calendar;
import java.util.Date;

import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import cn.com.dhcc.app.core.CM;
import cn.com.dhcc.app.core.base.IocBean;
import cn.com.dhcc.app.core.exception.ServiceException;
import cn.com.dhcc.app.core.service.Log;
import cn.com.dhcc.app.core.service.Log.LOGTYPE;
import cn.com.dhcc.app.core.util.DateUtil;
import cn.com.dhcc.turbo.entity.registry.NodeInfo;
import cn.com.dhcc.turbo.service.registry.BaseInfoService;
import cn.com.dhcc.turbo.service.stat.StatManageService;
/**
 * 统计定时任务
 * 需要每天执行一次的定时任务
 * 
 * @日期 2014-12-12 下午3:37:58
 * @作者  高强
 */
public class StatCronJob extends QuartzJobBean {

	private Logger logger = Log.getLogger(LOGTYPE.QUARTZJOB);
	
	
	@Override
	protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
		BaseInfoService baseInfoService=(BaseInfoService) CM.getBeanByName(IocBean.BASE_INFO_SERVICEIMPL_BEAN);
		NodeInfo localNode;
		try {
			localNode = baseInfoService.getCurrentNodeInfo();
			if (localNode==null) {
				return;
			}
		} catch (ServiceException e) {
			logger.error("获取本节点信息失败:"+e);
		}
		StatManageService statManageService = CM.getBean(StatManageService.class);
		Calendar calendar=Calendar.getInstance();
		 Date now=new Date();   
		 calendar.setTime(now);
//		 SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
		 Date preday=DateUtil.operation(now, Calendar.DAY_OF_MONTH, -1);//统计前一天的
		
			/******************每天都需要执行一次的 start****************************/
			 try {
				statManageService.statStlonummByDay(preday);//统计本节点接收和发送次数(月) turbo_st_lo_num_m
			 } catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			 }
			 try {
				statManageService.statStlonumnetmByDay(preday);//本节点内外网交换频次(月)turbo_st_lo_num_net_m
			 } catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			 }
			 try {
				statManageService.statStbtnettopmByDay(preday);// 内外网交换频次(月)
			 } catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			 }
			/******************每天都需要执行一次的 start****************************/
			
			/******************每月都需要执行一次的 start****************************/
			if (calendar.get(Calendar.DAY_OF_MONTH)==1) {//每月的1号执行上一月的统计
				try {
				 statManageService.statStlonumyByMonth(preday);//统计本节点接收和发送次数(年) turbo_st_lo_num_y
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				 statManageService.statStloRelNodeRatemByMonth(preday);//同本节点交换频率最高的节点（月） turbo_st_lo_rel_node_rate_m
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStloRelAdapterRatemByMonth(preday);//同本节点交换频率最高的系统（月）turbo_st_lo_rel_adapter_rate_m
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStlonumnetmByMonth(preday);//本节点内外网交换频次(年) turbo_st_lo_num_net_y
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStlonumsysmByMonth(preday);//本节点接收发送频次(按业务系统)(月)turbo_st_lo_num_sys_m
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStlonumdtypemByMonth(preday);//本节点接收/发送频次(按数据分类) turbo_st_lo_num_dtype_m
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);
			    }
				try {
				statManageService.statStBtNodeNummByMonth(preday);
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				   statManageService.statStbtnettopmByMonth(preday);
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStbtregyByMonth(preday);//节点/系统注册频次  turbo_st_bt_reg_y
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				 statManageService.statStbtdttopmByMonth(preday);//交换频率最高的业务数据 turbo_st_bt_dt_top_m
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
			}
			/******************每月都需要执行一次的 start****************************/
			
			/******************每年都需要执行一次的 start****************************/
			if (calendar.get(Calendar.MONTH)==0 && calendar.get(Calendar.DAY_OF_MONTH)==1) {//每1月的1号执行上一年的统计
				try {
				statManageService.statStloRelNodeRateyByYear(preday);//同本节点交换频率最高的节点（年） turbo_st_lo_rel_node_rate_y
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStloRelAdapterRateyByYear(preday);//同本节点交换频率最高的系统（年）turbo_st_lo_rel_adapter_rate_y
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStlonumsysyByYear(preday);//本节点接收发送频次(按业务系统)(年) turbo_st_lo_num_sys_y
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStlonumdtypeyByYear(preday);//本节点接收/发送频次(按数据分类) turbo_st_lo_num_dtype_y
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStBtNodeNumyByYear(preday);//节点间交换频次（年） turbo_st_bt_node_num_y
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
				try {
				statManageService.statStbtdttopmByYear(preday);//交换频率最高的业务数据 turbo_st_bt_dt_top_y
				} catch (ServiceException e) {
					logger.error("定时任务StatCronJob执行异常",e);;
			    }
			}
			/******************每年都需要执行一次的 end****************************/
		
	}
	public static void main(String[] args) {
		
	}
}